JavaScript和其他编程语言一样都可以使用分号,其用法就是使用分号(;)将执行语句隔开。它更像是中文中的句号,告诉每一句话的结束,分号在程序中则是象征着每一条程序代码的结束。当我们使用分号对代码进行分隔之后,对代码的整体的可读性和整洁性是非常重要的,如果不写分号,上一条语句的结束就成了下一条语句的开始,反之亦然。但是 JavaScript 中的分号是可选的,JavaScript 并不严格要求使用分号。 当有一个需要分号的地方时,JavaScript 会在解析时自动添加。执行此操作的过程称为自动插入分号。了解必须使用分号的规则非常重要,以避免编写产生错误的代码,因为它们的行为可能会与您预期的不同。
JavaScript 自动插入分号的规则
JavaScript 并不是在所有换行处都填补分号:只有在缺少了分号就无法正确解析代码的时候,JavaScript才会填补分号。在解析源代码期间,要是发现以下特定的情况时,JavaScript 解析器将会自动添加分号 :
当下一行代码开始会破坏当前一行的代码时( JavaScript 代码可以写在多行中 )。如果一条语句以(、[、/、+或-开始,那么它极有可能和前面一条语句合在一起解析。
当下一行以 } 开头时,或者以 } 结束闭合当前代码块时。
1.当解析到达源代码文件的末尾时。
2.当前行 return 语句后面紧跟着换行时。
3.当前行 break 语句后面紧跟着换行时。
4.当前行 throw 语句后面紧跟着换行时。
5.当前行 continue 语句后面紧跟着换行时。
考虑如下代码,因为两条语句用两行书写,第一个分号是可以省略掉的:
如果按照如下格式去书写,那么第一个分号则不能省略掉:
值得注意的是,JavaScript 就像我上述描述的一样,JavaScript只有在自身无法解析代码的时候,才会自动填补分号。例如:
JavaScript会自动填补分号,将其解析为:
我们可以通过规则简单来分析一下最后的解析结果,JavaScript给第一行末尾处添加了分号,试想一下如果没有分号,JavaScript就无法解析代码var c f。第二个f虽然可以单独当做一条语句“f;”,但是JavaScript并没有给第二行代码结尾处添加分号,因为它可以和第三行和第四行组成“f =10;”。
不过呢,因为这些分隔的规则会导致一些意想不到的状况,例如:
这里运行之后,会引发代码异常“TypeError: b is not a function”,JavaScripr 会爆出一个b不是个函数的错误,然而这段代码的本意并不是这样,那么这个是怎么出现问题了呢?
其实是因为第四行圆括号和第三行的b组成了一个函数调用,所以JavaScript 会把这段代码看做为:
通过以上代码,我们可以看到第三行和第四行组成之后b组成了一个函数,造成后面的错误,为了避免以上的错误,我们必须手动填写行尾的显示分号。
当然通过上述的规则,我们也可以这样灵活运用分号,例如:
在第四行的前面的分号保障的b与后面括号的分隔,这样 JavaScript 就可以按照我们的本意去执行语句了。也就是说分号可以灵活的在语句之前放入,不一定非要在语句之后放入。
不过在规则中我们也说明了,如果涉及到 return、break、throw、continue 语句时,JavaScript则会自动在后面填补分号,例如在某函数中:
JavaScript会自动把解析成成:
而我们的本意应该是这样:
所以也就是说,在上述这些特殊语句中,表达式之间建议不要使用换行,以免出现不必要的问题。如果添加了换行,程序则只有在在极特殊的情况下会出现报错,所以在调试或者可读方面也会非常的不方便。
还有一些特殊的运算符,比如“++”和“--”运算符,这些运算符可以作为表达式的前缀或者后缀,JavaScript在分隔的默认解析中都是以代码的前缀进行解析操作,如果想以后缀显示,需要让运算符和表达式在同一行显示,例如:
那么这行代码会默认解析成“a;++b;”,则不是“a++;b”,想获得后者,就需要让其运算符和表达式在一行显示,例如:
在此时,JavaScript 就会分隔解析成“a++;b;”。
本文原创,未经作者允许不可转载!
更多内容,欢迎关注作者微信公众号:李游leo老师在线课堂!
暂无评论
违反法律法规
侵犯个人权益
有害网站环境